package language_basic

import "fmt"

/*
变量是为存储特定类型的值而提供给内存位置的名称。
变量声明：
a,指定变量类型，声明后若不赋值，使用默认值
	var name type
	name = value
b,根据值自定判定变量的类型
	var name = value
c,使用:=声明局部变量，省略var。 特别注意，如果之前声明的变量，会导致编译错误。
	name := value
实例：
*/
var a = "bailiang"
var b string = "ceshi"

func PrintVar() {
	c := "!"
	fmt.Println(a, b, c)
}

/*
多变量声明
a，以逗号分隔，声明与赋值分开，若不赋值，存在默认值
var name1, name2, name3 type
name1, name2, name3 = v1, v2, v3

b，直接赋值，下面的变量类型可以是不同的类型
var name1, name2, name3 = v1, v2, v3

c，集合类型
var (
    name1 type1
    name2 type2
)
*/

/*
注意事项：
变量必须先定义才能使用,声明后必须使用，不然编译报错
go语言是静态语言，要求变量的类型和赋值的类型必须一致。
变量名不能冲突。(同一个作用于域内不能冲突)
简短定义方式，左边的变量名至少有一个是新的
简短定义方式，不能定义全局变量。
变量的零值。也叫默认值。
变量定义了就要使用，否则无法通过编译。
*/

/*
常量是一个简单值的标识符，在程序运行时，不会被修改的量。只能定义基础类型，如：数字，bool，字符串

const identifier [type] = value
显式类型定义： const b string = "abc"
隐式类型定义： const b = "abc"

*/
const LENGTH int = 10

func PrintConst() {
	const WIDTH int = 5
	var area int
	const a, b, c = 1, false, "str" //多重赋值

	area = LENGTH * WIDTH
	fmt.Printf("面积为 : %d", area)
	println()
	println(a, b, c)
}

/*
运行结构
面积为 : 50
1 false str
*/
